/**
 * 1。Promise 就是一个类 在执行这个类的时候  需要传递一个执行器进去 执行器会立即执行
 * 2、Promise 有三种状态 分别为 成功 fulfilled 失败 rejected 等待 pending
 *    pending -> fulfilled
 *    pending -> rejected
 *    一旦状态确定后就不可更改
 * 3、resolve 和  reject函数就是用来更改状态的
 *    resolve: fulfilled  用来更改为成功状态
 *    reject: rejected    用来更改为失败状态
 * 4、 then方法内部做的事情就是判断状态  如果状态成功调用成功的回调方法  反之  调用失败的回调方法
 * 5、 then成功回调有一个参数  
 */ 

 const MyPromise = require('./myPromise.js')

function p1 () {
  return new MyPromise(function(resolve, reject) {
    setTimeout(function() {
      resolve('p1')
    }, 2000)
  })
}
function p2 () {
  return new MyPromise(function(resolve, reject) {
    reject('reject p2')
    // resolve('p2')
  })
}

p2().then(value => console.log(value))
    .catch(reason => console.log(reason))


// p2().finally(() => {
//   console.log('finally')
//   return p1()
// }).then(value => {
//   console.log(value)
// }, reason => {
//   console.log(reason)
// })

// MyPromise.resolve(100).then(value => console.log(value))
// MyPromise.resolve(p1()).then(value => console.log(value))
// MyPromise.all(['a', 'b', p1(), p2(), 'c']).then(reslut => console.log(reslut))

//  let promise = new MyPromise((resolve, reject) => {
//     // setTimeout(() => {
//     //   // throw new Error('执行器错误')
//     //   resolve('成功.....') 
//     // }, 2000) 
//     reject('失败')
//  })

// promise.then((res) => {
//   console.log(res)
// }, (err) => {
//  console.log(err)
// })

// promise.then((res) => {
//   console.log(res)
//   // throw new Error('then error')
//   return 'aaa';
// }, (err) => {
//  console.log(err)
//  return 10000
// }).then((value) => {
//     console.log(value)
// })


// promise.then().then().then(value => console.log(value), reason => console.log(reason))


// function other() {
//   return new MyPromise((resolve, reject) => {
//     resolve('other')
//   })
// }



// let p1 = promise.then(value => {
//   console.log(value)
//   return p1
// })




// p1.then(value => {
//   console.log(value)
// }, reason => {
//   console.log(reason.message)
// })